// 用户信息验证模块
const joi = require('joi')
    /**
     * string() 值必须是字符串
     * alphanum() 值只能是包含a-zA-Z0-9 的字符串
     * min(length) 最小长度
     * max(length) 最大长度
     * required() 值是必填项，不能为undefined
     * pattern(正则表达式) 值必须为符合正则表达式的规则
     */
    // 用户名的验证规则

const username = joi.string().alphanum().min(1).required()

// 密码的验证规则
const password = joi
    .string().pattern(/^[\S]{6,12}$/).required()


// 定义id,nickname,email 的验证规则
const id = joi.number().integer().min(1).required()
const nickname = joi.string().required()
const email = joi.string().email().required()


// 注册和登录表单的验证规则对象
exports.reg_login_schema = {
    body: {
        username,
        password
    }
}

// 共享更新用户基本信息的验证规则对象
exports.update_userinfo_schema = {
    body: {
        id,
        nickname,
        email
    }
}

// 共享重置密码的验证规则对象
exports.update_password_schema = {
    body: {
        // 使用password这个规则，验证req.body.oldPwd的值
        oldPwd: password,
        // 使用joi.not(joi.ref('oldPwd')).concat(password) 规则，验证req.body.newPwd的值
        // 解读:
        // 1.joi.ref('oldPwd') 表示newPwd的值必须和oldPwd的值保持一致。
        // 2.joi.not(joi.ref('oldPwd')) 表示newPwd的值不能等于oldPwd的值
        // 3. .concat() 用于合并joi.not(joi.ref('oldPwd')) 和password 这两条验证规则
        newPwd: joi.not(joi.ref('oldPwd')).concat(password)
    }
}